package com.tedu.api.list;

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import org.junit.Test;
/**
 * 导入包问题：同一包下的类需要导入
 *          import java.util.ArrayList;
 * import java.util.List;
 * 通配符   *  匹配当前包【文件夹】下所有的类
 *            import java.util.*;
 */
import java.util.*;


/**
 * List集合
 * Collection顶级集合接口【容器】---List集合【子接口】
 * List集合存储数据：存储有序并且重复的元素
 * List---接口---无法创建对象
 * 实现类：
 * ArrayList[常用：List与ArrayList的方法完全一致】数组实现
 * LinkedList：双向链接实现
 * Vector：JDk1.8版本：性能：增删效率慢，线程安全：---ArrayList
 * 重点：掌握List接口集合中所有方法
 */

public class ListAPI {
    /**
     *  get(int index)    返回值：E---Object
     *  作用：获取给定下标处的元素，从0开始
     */
    @Test
    public void testGet(){
        //List集合----多态创建集合
        List<String> List=new ArrayList<>();
        //Collection     提供add方法  | List   提供add方法  【重写】
        List.add("想成为白万富翁");
        List.add("想成为白万富翁");
        List.add("诶呀！成功了");
        System.out.println("List集合"+List);
        //获取到List集合中元素叫：你的名字
        String str=List.get(1);
        System.out.println("获取集合中的："+str);
        //需求：获取List集合中所有元素  ---普通for
        for (int i=0;i< List.size();i++){//针对集合----下标：从0开始
            str=List.get(i);
            System.out.println("遍历list集合："+str);
        }
    }
    /**
     * set(int index, E e)  返回值：E
     * 作用：将给定元素设置到指定的下标位置处
     */
    @Test
    public void testSet(){
        List<String> List=new ArrayList<>();
        //Collection     提供add方法  | List   提供add方法  【重写】
        List.add("想成为白万富翁");
        List.add("想成为白万富翁");
        List.add("诶呀！成功了");
        //需求:List集合中元素“你的名字”修改为“749局”
        List.set(0,"749局");
        System.out.println(List);
    }
    /**
     * List继承Collection【重载：拓展功能】
     * add（int index，E e）    返回值：void
     * 作用：将给定的元素插入指定的位置
     * remove（int index，）  返回值：E
     * 作用：将给定位置的元素从集合中删除
     *
     * 特点：查询快，增删慢，---选择List/ArrayList
     */
    @Test
    public void testAR(){
        //创建List集合--重写方法add（）  重载方法add（下标，“元素”）
        List<String> list=new ArrayList<>();
        list.add("秦始皇");list.add("汉武帝");
        list.add("王安石");list.add("潘金莲");
        System.out.println("List集合元素："+list);
        list.add(3,"武大郎");
        System.out.println("List集合元素："+list);
        list.remove(2);
        System.out.println("List集合元素："+list);
    }
    /**
     * List集合
     * subList（int start,int end）   返回值：list<E>
     * 作用：截取范围内的子集  含头不含尾
     */
    @Test
    public void testSubList(){
        //创建集合：10个元素  ：0~9
        List<Integer> list=new ArrayList<>();
        for (int i=0;i<10;i++){// i 循环针对下标
            list.add(i);

        }
        System.out.println("List集合元素："+list);
        //获取子集：list集合元素中3~8之间元素
        List<Integer>listch=list.subList(3,9);
        System.out.println("获取的子集："+listch);
        System.out.println("=======================");
        //获取子集：list集合元素中2~6之间元素，自己元素扩大10倍
        //1.获取子集：从List集合中，取2~6之间元素
        List<Integer> list2=list.subList(2,7);
        System.out.println("获取的子集："+list2);

        //2.for循环遍历子集，遍历同时给每个下标的元素*10倍
        //提示：size（）获取子集长度   set（下标，获取元素*10）设置每个下标的长度
        //     get（）获取元素*10
        for(int i=0;i< list2.size();i++){//i   获取下标   0~4
            list2.set(i,list2.get(i)*10);


        }
        System.out.println("自己扩大十倍的元素："+list2);
        /**
         * 需求：清空list2子集    输出：list    【0  1    7  8  9】
         * 特点：清空clear以及设置set直接对集合的操作
         */
        list2.clear();
        System.out.println("清空子集：【List】"+list2);



    }
    /**
     * 集合排序
     * Random    伪随机数类    包位置：Java.util
     * collection   集合工具类   静态方法：sort
     * sort（）方法：针对集合元素是数值进行排序【默认：升序】！返回值：List
     *
     * 需求：随机生成10个元素【整数：100以内】的集合 ---对集合的排序
     */
    @Test
    public void testAArrayList(){
        //创建List集合<整数>
        List<Integer> list=new ArrayList<>();
        //创建伪随机数
        Random r=new Random();
        for (int i=0;i<10;i++){  //  10个元素
            list.add(r.nextInt(100));   //100以内

        }
        System.out.println("打印list："+list);
        //对list集合元素进行排序   Collection.sort(集合)
        Collections.sort(list);
        System.out.println("【有排序】打印list："+list);

    }
    /**
     * 需求：创建集合，存汉字、排序---能排【没规则】
     * sort（集合，Comparator）    重载功能：拓展排序的功能
     * 集合：排序集合
     * Comparator比较器接口：指定规则---【定规则：按照字符串长短排序】
     * 重写：compare（）---定义比较规则，默认自带交换功能
     */
    @Test
    public void testCompartor(){
        //创建集合---存：汉字
        List<String> list=new ArrayList<>();
        list.add("阿西吧");
        list.add("搜都寺内");
        list.add("呦西");
        //比较器规则定义：按照字符串长度进行排序
        //Comparator比较器接口---创建1次对象---采用匿名内部类
        Comparator<String> com=new Comparator<String>(){
            //compare方法：针对集合进行【自定义】排序
       //参数1：泛型：Object  o1   集合中第一【自定义】个元素
       //参数2：泛型：Object  o2   集合中第二【交换】个元素
            public int compare(String o1, String o2) {
                /**
                 * 返回值   大于  0    4-2  交换
                 * 返回值   小于  0    3-4 不交换
                 * 返回值   等于  0    2-2  不变
                 */
                return o1.length()-o2.length();
            }
        };
        Collections.sort(list);
        System.out.println("排序后的集合："+list);


    }
}
//学习心得：练---拓展【计算机语言】---坚持
//JavaSE基础     JavaEE
